﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cloo;

namespace Processing
{
    /// <summary>
    /// Enumerator für den Status einer Kernel
    /// </summary>
    public enum KernelState
    {
        /// <summary>
        /// Gibt an dass die Kernel im Ausgangszustand ist.
        /// </summary>
        Idle,

        /// <summary>
        /// Gibt an dass die Kernel im laufenden Zustand ist.
        /// </summary>
        Running,

        /// <summary>
        /// Gibt an dass die Kernel im abgeschlossenen Zustand ist.
        /// </summary>
        Done,

        /// <summary>
        /// Gibt an dass die Kernel im fehlgeschlagenen Zustand ist.
        /// </summary>
        Failed
    }

    /// <summary>
    /// Schnittstelle für eine Kernel.
    /// </summary>
    public interface IKernel : IDisposable
    {
        /// <summary>
        /// Gibt den Status der Kernel an.
        /// </summary>
        KernelState State { get; }

        /// <summary>
        /// Führt die Kernel aus.
        /// </summary>
        void Run();

        /// <summary>
        /// Führt die asynchron Kernel aus.
        /// </summary>
        void RunAsync();
    }
}
